# Cargar librerías necesarias 
library(readxl)
library(lmtest)
library(sandwich)
library(car)
library(tseries)
library(plm)

# Establecer ruta del archivo Excel
ruta <- "C:/Users/ACER/Desktop/EAFIT/proyecto de grado/Soportes/Regresiones Pyton/Tesis GMM R/Base de datos renombrada final 18.05.2025.xlsx"

# Leer la hoja con los datos
datos <- read_excel(ruta, sheet = "4. BD Comp Media resumida log")

# Convertir variables categóricas
datos$Año <- as.numeric(datos$Año)
datos$NIT <- as.factor(datos$NIT)
datos$TAMc <- as.factor(datos$TAMc)

# Estimar modelo OLS con variable dependiente PAT
modelo_ols <- lm(PAT ~ MEBITDA + PRO + LIQd + TAMa + `ΔAct` +
                   RDC + EA + GIA + LA + RUV + ROA + TAMi + VRI,
                 data = datos)

# Mostrar resumen del modelo con errores estándar robustos (HC3)
cat("=== RESUMEN DEL MODELO CON ERRORES ROBUSTOS (HC3) ===\n")
print(coeftest(modelo_ols, vcov = vcovHC(modelo_ols, type = "HC3")))

# 1. Test de heterocedasticidad (Breusch-Pagan)
cat("\n=== TEST DE HETEROCEDASTICIDAD (Breusch-Pagan) ===\n")
bp_test <- bptest(modelo_ols)
print(bp_test)

# 2. Test de multicolinealidad (VIF)
cat("\n=== TEST DE MULTICOLINEALIDAD (VIF) ===\n")
vif_valores <- vif(modelo_ols)
print(vif_valores)

# 3. Test de normalidad (Jarque-Bera) de los residuos
cat("\n=== TEST DE NORMALIDAD (Jarque-Bera) ===\n")
jb_test <- jarque.bera.test(residuals(modelo_ols))
print(jb_test)

# 4. Test de especificación funcional (Ramsey RESET)
cat("\n=== TEST DE ESPECIFICACIÓN FUNCIONAL (RESET) ===\n")
reset_test <- resettest(modelo_ols, power = 2:3, type = "fitted")
print(reset_test)

# 5. Test de estacionariedad (Dickey-Fuller) para la variable dependiente PAT
cat("\n=== TEST DE ESTACIONARIEDAD (Dickey-Fuller) ===\n")
adf_test <- adf.test(datos$PAT, alternative = "stationary")
print(adf_test)
